<?php
require_once "classes/persistence/DBManager.php";
class UsuarioDAO implements IDAO
{	
	function __construct()
	{
	}
	
	/**
	 * Busca un usuario seg�n su username.
	 * @param string $username El nombre de usuario.
	 * @return Usuario El usuario si se encuentra, null en todo otro caso.
	 */
	static function findByUsername($username)
	{
		$db = DBManager::getConnection();
		
		$result = $db->fetchAll("SELECT * FROM USUARIOS WHERE USU_USERNAME = '$username'");
		$u = $result[0];
		require_once "classes/model/Usuario.php";
		
		if($u["ES_SUPER"] == 'S'){
			$esSuper = true;
		} else {
			$esSuper = false;
		}
		
		$user = new Usuario($u["USU_USERNAME"], $u["USU_NOM"], $u["USU_APE"], $u["USU_PASS"], $esSuper);
		$user->assignId($u["ID"]);
		
		$db->closeConnection();
		
		return $user;
	}
	
	/**
	 * Inserta los datos correspondientes a un usuario en la base de datos.
	 * El usuario debe haber pasado antes por el PersistenceController!!!
	 * @param Usuario $usuario
	 * @return void
	 */
	static function persist($usuario)
	{
		$db = DBManager::getConnection();
		
		$id = $usuario->getId();
		$username = $usuario->getUsername();
		$nombre = $usuario->getNombre();
		$apellido = $usuario->getApellido();
		$pass = $usuario->getPass();
		if($usuario->isSuper()){
			$superStr = 'S';	
		} else {
			$superStr = 'N';
		}
		try
		{
			$db->query("INSERT INTO USUARIOS(ID, USU_USERNAME, USU_NOM, USU_APE, USU_PASS, ES_SUPER)
			VALUES($id, '$username', '$nombre', '$apellido', '$pass', '$superStr')");
		} catch (Exception $e) {
			throw new Exception("Ocurrió una excepción nivel de BBDD. Estás intentando persistir un usuario sin usar el PersistenceController?");
		}
		
		$db->closeConnection();
	}
	
	static function findAllAsDbArray()
	{
		$db = DBManager::getConnection();
		
		$result = $db->fetchAll("SELECT * FROM USUARIOS");
		
		$db->closeConnection();
		
		return $result;
	}
	
	static function delete($user)
	{
		$db = DBManager::getConnection();
		
		$id = $user->getId();
		$db->query("DELETE FROM USUARIOS WHERE ID = $id");
		
		$db->closeConnection();
	}
	
}